<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <p data-lake-id="u8f9ef2ee" id="u8f9ef2ee"><span data-lake-id="u84fa4838" id="u84fa4838">最近一段时间，我除了写业务代码之外，还整了个新鲜玩意，那就是参与搞了一下隐私计算相关的事情。</span></p>
  <p data-lake-id="u65553005" id="u65553005"><br></p>
  <p data-lake-id="u2abd456e" id="u2abd456e"><span data-lake-id="u011fcfaa" id="u011fcfaa">现在有空了，刚好总结一下。因为隐私计算可能对于很多工程开发朋友来说很陌生，所以，</span><strong><span data-lake-id="u75c12078" id="u75c12078">我这篇文章主要是给大家科普一下，让大家知道有这么个技术以及现在的主要方向。</span></strong><span data-lake-id="u0e08190e" id="u0e08190e">这里面不会有太多的算法内容和底层原理，相信大家应该都能看得懂。</span></p>
  <p data-lake-id="u8e0c9130" id="u8e0c9130"><br></p>
  <p data-lake-id="u290dc37a" id="u290dc37a"><span data-lake-id="uc2bad35b" id="uc2bad35b">随着移动互联网、云计算、物联网等信息技术的蓬勃发展，世界进入了数据爆炸的"大数据时代"。在各行各业，数据都发挥着至关重要的作用，越来越多的场景需要多方数据的流通和共享。如我们所在的金融部门，则需要借助外部金融数据，结合我们的场景业务数据进行联合建模，实现联合风控、数字营销、智能反诈、精准获客等。</span></p>
  <p data-lake-id="u003871ed" id="u003871ed"><br></p>
  <p data-lake-id="uc97111ad" id="uc97111ad"><span data-lake-id="u48493227" id="u48493227">所以，站在这个历史节点上，在数据合作、共享方面，横亘在我们面前的&#x1;有几个重要的问题需要解决：</span></p>
  <p data-lake-id="uf7c66308" id="uf7c66308"><br></p>
  <p data-lake-id="uae40deb6" id="uae40deb6"><span data-lake-id="uce0f1c4e" id="uce0f1c4e">1、“数据孤岛“现象普遍存在；数据流通安全性风险高；<br></span><span data-lake-id="u7998a7c3" id="u7998a7c3">2、数据合规监管日趋严格；隐私泄露导致信任鸿沟；</span></p>
  <p data-lake-id="u070f638e" id="u070f638e"><br></p>
  <p data-lake-id="ufdc1da24" id="ufdc1da24"><span data-lake-id="ufb64da33" id="ufb64da33">其中，随着个人信息保护法在2021年11月的推出，监管问题更是我们亟待解决的。</span></p>
  <p data-lake-id="u514d6967" id="u514d6967"><br></p>
  <p data-lake-id="u61ff8fb1" id="u61ff8fb1"><span data-lake-id="u67a74a42" id="u67a74a42">但是近几年，随着电子商务法、数据安全法、《个人信息保护法》等一些列法律法规的推出，使得我们不得不重视个人隐私的问题。</span></p>
  <p data-lake-id="u5511d42a" id="u5511d42a"><br></p>
  <p data-lake-id="ued3ffafb" id="ued3ffafb"><img src="https://cdn.nlark.com/yuque/0/2023/png/5378072/1702098564103-1d245131-248d-46cb-adec-5eff437bdbb5.png?x-oss-process=image%2Fwatermark%2Ctype_d3F5LW1pY3JvaGVp%2Csize_60%2Ctext_SmF2YSA4IEd1IFA%3D%2Ccolor_FFFFFF%2Cshadow_50%2Ct_80%2Cg_se%2Cx_10%2Cy_10"></p>
  <p data-lake-id="ufc25cd9d" id="ufc25cd9d"><br></p>
  <p data-lake-id="ucc5571ef" id="ucc5571ef"><span data-lake-id="u56bb00bd" id="u56bb00bd">虽然个人信息的保护越来越严格，但是，从很多的法规中我们可以解读出来，其实，大的形式上，官方还是比较支持我们合规的进行数据的利用和开发的。</span></p>
  <p data-lake-id="u66e96284" id="u66e96284"><br></p>
  <p data-lake-id="uc2d0956b" id="uc2d0956b"><span data-lake-id="u93739065" id="u93739065">那么，如何解决这些问题呢？</span></p>
  <p data-lake-id="u729ea8af" id="u729ea8af"><br></p>
  <p data-lake-id="u23169d1b" id="u23169d1b"><span data-lake-id="u8cb4b9f9" id="u8cb4b9f9">其实，从《个保法》中我们可以找到一些切入口，根据中对个人信息的定义是这样的：</span></p>
  <p data-lake-id="u4f94b74f" id="u4f94b74f"><br></p>
  <p data-lake-id="ufc3841b7" id="ufc3841b7"><span data-lake-id="u51bfe3ad" id="u51bfe3ad">以电子或者其他方式记录的</span><strong><span data-lake-id="ubb8fac3c" id="ubb8fac3c">与已识别或者可识别的自然人有关的</span></strong><span data-lake-id="ua6242c07" id="ua6242c07">各种信息，</span><strong><span data-lake-id="uf8b31362" id="uf8b31362">不包括匿名化处理后的信息。</span></strong></p>
  <p data-lake-id="u2b7ad6f1" id="u2b7ad6f1"><br></p>
  <p data-lake-id="uccdae3fd" id="uccdae3fd"><span data-lake-id="u24de48bd" id="u24de48bd">可见，如果我们能够对个人信息进行</span><strong><span data-lake-id="ub8ec1321" id="ub8ec1321">去标识化</span></strong><span data-lake-id="uaadfaa46" id="uaadfaa46">和</span><strong><span data-lake-id="ua688a3ee" id="ua688a3ee">匿名化</span></strong><span data-lake-id="ucce7cdc1" id="ucce7cdc1">处理，那么，就可以利用这些信息了。</span></p>
  <p data-lake-id="uaa994a29" id="uaa994a29"><br></p>
  <p data-lake-id="ucf481594" id="ucf481594"><span data-lake-id="u6ee75412" id="u6ee75412">所以，很多相关的技术也就诞生了，这些技术主要解决的就是通过数据</span><strong><span data-lake-id="uce0750a5" id="uce0750a5">可用不可见</span></strong><span data-lake-id="u6541e191" id="u6541e191">的方式帮助我们进行跨机构间的数据协同。这类技术，统称为隐私计算技术。</span></p>
  <p data-lake-id="u7c11b63e" id="u7c11b63e"><br></p>
  <p data-lake-id="uc801627b" id="uc801627b"><span data-lake-id="u0c2a5978" id="u0c2a5978">隐私保护计算经过很多年的发展，在具体的落地实现的技术上，主要有三个主流的方向：</span></p>
  <p data-lake-id="u66e5d780" id="u66e5d780"><br></p>
  <p data-lake-id="u48c6aaa9" id="u48c6aaa9"><span data-lake-id="u6304d54f" id="u6304d54f">1、基于密码学的多方安全计算（MPC）<br></span><span data-lake-id="ue9f0ec57" id="ue9f0ec57">2、基于可信硬件的可信执行环境（TEE）<br></span><span data-lake-id="u992a17c9" id="u992a17c9">3、基于混合技术方案的联邦学习（FL）</span></p>
  <p data-lake-id="u31cb9abb" id="u31cb9abb"><br></p>
  <p data-lake-id="u2e7d8342" id="u2e7d8342"><img src="https://cdn.nlark.com/yuque/0/2023/png/5378072/1702098574429-54bf95e4-9baa-490c-a1f0-e8b6df22b576.png?x-oss-process=image%2Fwatermark%2Ctype_d3F5LW1pY3JvaGVp%2Csize_52%2Ctext_SmF2YSA4IEd1IFA%3D%2Ccolor_FFFFFF%2Cshadow_50%2Ct_80%2Cg_se%2Cx_10%2Cy_10"><img src="media/16399029521983/16399035120000.jpg?x-oss-process=image%2Fwatermark%2Ctype_d3F5LW1pY3JvaGVp%2Csize_9%2Ctext_SmF2YSA4IEd1IFA%3D%2Ccolor_FFFFFF%2Cshadow_50%2Ct_80%2Cg_se%2Cx_10%2Cy_10"></p>
  <p data-lake-id="ud5b601be" id="ud5b601be"><br></p>
  <p data-lake-id="ua9eae204" id="ua9eae204"><span data-lake-id="u9b73383d" id="u9b73383d">想要实现去标识化和匿名化，主要的方式就是让原始的用户数据无法被识别。</span></p>
  <p data-lake-id="uec6637ef" id="uec6637ef"><br></p>
  <p data-lake-id="u24c27e80" id="u24c27e80"><span data-lake-id="u55031026" id="u55031026">其中多方安全计算主要是基于密码学的方式，把数据进行加密处理，这样我们就可以使用加密后的数据进行算法建模了。</span></p>
  <p data-lake-id="ua3de9996" id="ua3de9996"><br></p>
  <p data-lake-id="u406b3a7a" id="u406b3a7a"><span data-lake-id="u90854694" id="u90854694">另外，可信执行环境是一种基于硬件的数据，大概就是把数据放到一个硬件中，只在这个硬件内部使用，外部无法直接读取。</span></p>
  <p data-lake-id="uc0a9e269" id="uc0a9e269"><br></p>
  <p data-lake-id="ub5f6323d" id="ub5f6323d"><span data-lake-id="u1752cafd" id="u1752cafd">还有一种技术那就是混合了多种方案的技术，那就是联邦学习。</span></p>
  <p data-lake-id="u524fb06c" id="u524fb06c"><br></p>
  <p data-lake-id="ubaffb7d0" id="ubaffb7d0"><span data-lake-id="ufe2d3e6d" id="ufe2d3e6d">其中联邦学习因为其不依赖硬件、可以解决复杂的算法建模问题等优势，虽然相比其他方案存在着一定的效率问题，但是随着技术的发展，如何突破性能瓶颈，达到实用性、安全性的平衡，并进一步提升安全性，这些问题终将被解决。所以，这项技术被认为是"人工智能的最后一公里"、"下一代人工智能协同算法和协作网络的基础"。</span></p>
  <p data-lake-id="u0cf36462" id="u0cf36462"><br></p>
  <h3 data-lake-id="166c215f" id="166c215f"><span data-lake-id="u1df471f5" id="u1df471f5">联邦学习</span></h3>
  <p data-lake-id="ue9c0a74b" id="ue9c0a74b"><br></p>
  <p data-lake-id="ub88719fd" id="ub88719fd"><strong><span data-lake-id="u2f8d1e10" id="u2f8d1e10">联邦学习（Federated Learning）</span></strong><span data-lake-id="uacc5e1d0" id="uacc5e1d0">是一种新兴的人工智能基础技术，在 2016 年由谷歌最先提出，原本用于解决安卓手机终端用户在本地更新模型的问题，其</span><strong><span data-lake-id="u60759098" id="u60759098">设计目标是在保障大数据交换时的信息安全、保护终端数据和个人数据隐私、保证合法合规的前提下，在多参与方或多计算结点之间开展高效率的机器学习。</span></strong></p>
  <p data-lake-id="u7ac76030" id="u7ac76030"><br></p>
  <p data-lake-id="uadba04a9" id="uadba04a9"><span data-lake-id="u62efedad" id="u62efedad">我们把每个参与共同建模的企业称为参与方，根据多参与方之间数据分布的不同，把联邦学习分为三类：横向联邦学习、纵向联邦学习和联邦迁移学习。</span></p>
  <p data-lake-id="uffaec613" id="uffaec613"><br></p>
  <p data-lake-id="u3dd61676" id="u3dd61676"><img src="media/16399029521983/16399037591785.jpg?x-oss-process=image%2Fwatermark%2Ctype_d3F5LW1pY3JvaGVp%2Csize_9%2Ctext_SmF2YSA4IEd1IFA%3D%2Ccolor_FFFFFF%2Cshadow_50%2Ct_80%2Cg_se%2Cx_10%2Cy_10"><img src="https://cdn.nlark.com/yuque/0/2023/png/5378072/1702098587085-dd4dff53-de3b-492c-8a6a-bc1bc8b3524e.png?x-oss-process=image%2Fwatermark%2Ctype_d3F5LW1pY3JvaGVp%2Csize_31%2Ctext_SmF2YSA4IEd1IFA%3D%2Ccolor_FFFFFF%2Cshadow_50%2Ct_80%2Cg_se%2Cx_10%2Cy_10"></p>
  <p data-lake-id="ua0f52aa2" id="ua0f52aa2"><br></p>
  <p data-lake-id="u12315d06" id="u12315d06"><span data-lake-id="u3396440a" id="u3396440a">横向联邦学习的本质是样本的联合，适用于参与者间业态相同但触达客户不同，即特征重叠多，用户重叠少时的场景，比如不同地区的银行间，他们的业务相似（特征相似），但用户不同（样本不同）。主要解决样本不足的问题。</span></p>
  <p data-lake-id="u6221e527" id="u6221e527"><br></p>
  <p data-lake-id="udb944f25" id="udb944f25"><span data-lake-id="u26f9382b" id="u26f9382b">纵向联邦学习的本质是特征的联合，适用于用户重叠多，特征重叠少的场景，比如同一地区的商超和银行，他们触达的用户都为该地区的居民（样本相同），但业务不同（特征不同）。主要解决特征不足的问题。</span></p>
  <p data-lake-id="u69b49a15" id="u69b49a15"><br></p>
  <p data-lake-id="u4eee1696" id="u4eee1696"><span data-lake-id="u4ab267a9" id="u4ab267a9">因为我们这面主要是金融业务，隐私计算的应用场景是基于联邦学习和外部银行、机构等做联合风控，多头借贷等金融业务。所以我们基本上是想用我们具有的用户的电商数据、和外部机构具有的信贷数据、征信数据等进行纵向连邦学习。</span></p>
  <p data-lake-id="ud4675bd4" id="ud4675bd4"><br></p>
  <p data-lake-id="ub33b7a1d" id="ub33b7a1d"><span data-lake-id="u03e2b070" id="u03e2b070">纵向联邦学习的主要流程如下：</span></p>
  <p data-lake-id="u4f2a1c66" id="u4f2a1c66"><br></p>
  <p data-lake-id="u429e7249" id="u429e7249"><img src="https://cdn.nlark.com/yuque/0/2023/png/5378072/1702098597199-262fb0ca-b5d0-45c3-9137-9427eabb4866.png?x-oss-process=image%2Fwatermark%2Ctype_d3F5LW1pY3JvaGVp%2Csize_22%2Ctext_SmF2YSA4IEd1IFA%3D%2Ccolor_FFFFFF%2Cshadow_50%2Ct_80%2Cg_se%2Cx_10%2Cy_10"><img src="media/16399029521983/16399036608650.jpg?x-oss-process=image%2Fwatermark%2Ctype_d3F5LW1pY3JvaGVp%2Csize_9%2Ctext_SmF2YSA4IEd1IFA%3D%2Ccolor_FFFFFF%2Cshadow_50%2Ct_80%2Cg_se%2Cx_10%2Cy_10"></p>
  <p data-lake-id="ub04516be" id="ub04516be"><br></p>
  <p data-lake-id="ue7a9c920" id="ue7a9c920"><span data-lake-id="u37c94628" id="u37c94628">第一步：加密样本对齐。是在系统级做这件事，因此在企业感知层面不会暴露非交叉用户。<br></span><span data-lake-id="u54999ffa" id="u54999ffa">第二步：对齐样本进行模型加密训练：<br></span><span data-lake-id="u0722438e" id="u0722438e">step1：由第三方C向A和B发送公钥，用来加密需要传输的数据；<br></span><span data-lake-id="uff31f9a1" id="uff31f9a1">step2：A和B分别计算和自己相关的特征中间结果，并加密交互，用来求得各自梯度和损失；<br></span><span data-lake-id="u57610512" id="u57610512">step3：A和B分别计算各自加密后的梯度并添加掩码发送给C，同时B计算加密后的损失发送给C；<br></span><span data-lake-id="u3d65a803" id="u3d65a803">step4：C解密梯度和损失后回传给A和B，A、B去除掩码并更新模型。</span></p>
  <p data-lake-id="uaf3e048b" id="uaf3e048b"><br></p>
  <h3 data-lake-id="bb39d612" id="bb39d612"><span data-lake-id="u7c7b2779" id="u7c7b2779">FATE 框架</span></h3>
  <p data-lake-id="u4b3d9b3b" id="u4b3d9b3b"><br></p>
  <p data-lake-id="u716c5b34" id="u716c5b34"><span data-lake-id="u453c129c" id="u453c129c">因为目前关于联邦学习的技术，很多大厂都有在投入，其中阿里、蚂蚁、字节、腾讯等都很多成功的案例。</span></p>
  <p data-lake-id="u66054e67" id="u66054e67"><br></p>
  <p data-lake-id="u0781cfda" id="u0781cfda"><span data-lake-id="u4ec46d5c" id="u4ec46d5c">我们此次在进行联邦学习相关调研的时候，有不同的同事分别调研不同的框架。我这面主要负责基于开源的框架进行调研。</span></p>
  <p data-lake-id="u870c6694" id="u870c6694"><br></p>
  <p data-lake-id="u2b7f627f" id="u2b7f627f"><span data-lake-id="ub04afbb2" id="ub04afbb2">因为关于联邦学习，最重要的还是解决数据的安全性问题，目前看来，很多外部机构，对于开源的框架接受度更高一些。市面上也有很多联邦学习框架，如微众银行开源的FATE、字节开源的FedLearner、百度开源的PaddleFL等。其中 FATE 被使用的最广泛，被认为是联邦学习的样板项目。</span></p>
  <p data-lake-id="u28658ebe" id="u28658ebe"><br></p>
  <p data-lake-id="uc6ccde2b" id="uc6ccde2b"><span data-lake-id="u00f5aed3" id="u00f5aed3">FATE (Federated AI Technology Enabler) 是微众银行AI部门发起的开源项目，为联邦学习生态系统提供了可靠的安全计算框架。FATE项目使用多方安全计算 (MPC) 以及同态加密 (HE) 技术构建底层安全计算协议，以此支持不同种类的机器学习的安全计算，包括逻辑回归、基于树的算法、深度学习和迁移学习等。</span></p>
  <p data-lake-id="u90834d81" id="u90834d81"><br></p>
  <p data-lake-id="u4f42cf55" id="u4f42cf55"><span data-lake-id="u91c902fa" id="u91c902fa">FATE 有4种部署方式，分别是基于Docker-Compose的部署、Standalone部署、Native的集群部署、基于KubeFATE的部署。</span></p>
  <p data-lake-id="u54237082" id="u54237082"><br></p>
  <ul list="u3554dcc4">
   <li fid="u810691bb" data-lake-id="u613cfe0b" id="u613cfe0b"><span data-lake-id="u18d5dad4" id="u18d5dad4"> 基于Docker-Compose：快速体验一下FATE，跑的模型和数据在单台机器就够了，部署起来比较简单。 </span></li>
   <li fid="u810691bb" data-lake-id="udfd68712" id="udfd68712"><span data-lake-id="u5fc9deb9" id="u5fc9deb9"> Standalone单机部署：只是想开发算法，而开发机器性能又不高。 </span></li>
   <li fid="u810691bb" data-lake-id="u401b4f2c" id="u401b4f2c"><span data-lake-id="uafea8454" id="uafea8454"> 基于KubeFATE：对FATE的使用需求因数据集和模型变大，需要扩容，并且里面有数据需要维护一个FATE集群，则考虑使用基于KubeFATE在Kubernetes集群的部署方案。 </span></li>
   <li fid="u810691bb" data-lake-id="ud4852510" id="ud4852510"><span data-lake-id="u5f95fceb" id="u5f95fceb"> Native的集群部署：一般是在特殊原因下才会用，如内部无法部署Kubernetes，或者需要对FATE的部署进行自己的二次开发等。&#xb;<br></span><span data-lake-id="u601a9c7c" id="u601a9c7c">为了快速验证，我们此次部署主要是采用了基于Docker-Compose和基于KubeFATE两种部署方式。部署过程中还是遇到了很多的问题的。 </span></li>
  </ul>
  <p data-lake-id="u94f102b0" id="u94f102b0"><br></p>
  <p data-lake-id="ub7910e89" id="ub7910e89"><span data-lake-id="u2a3d70ce" id="u2a3d70ce">关于这两种部署方式的部署过程以及一些问题的解决，不是本文的重点，我把他们单独放到我的博客中了，大家如果感兴趣可以去我的博客中阅读。</span></p>
  <p data-lake-id="ub88e6602" id="ub88e6602"><br></p>
  <p data-lake-id="u63525c14" id="u63525c14"><span data-lake-id="u654dcef9" id="u654dcef9">下面这张就是 FATE 的一个部署架构图：</span></p>
  <p data-lake-id="uef75a28e" id="uef75a28e"><br></p>
  <p data-lake-id="u2c7dbb06" id="u2c7dbb06"><img src="media/16399029521983/16399043850726.jpg?x-oss-process=image%2Fwatermark%2Ctype_d3F5LW1pY3JvaGVp%2Csize_9%2Ctext_SmF2YSA4IEd1IFA%3D%2Ccolor_FFFFFF%2Cshadow_50%2Ct_80%2Cg_se%2Cx_10%2Cy_10"><img src="https://cdn.nlark.com/yuque/0/2023/png/5378072/1702098609269-31c68b9a-788c-4641-a177-f50a4fc64a3d.png?x-oss-process=image%2Fwatermark%2Ctype_d3F5LW1pY3JvaGVp%2Csize_22%2Ctext_SmF2YSA4IEd1IFA%3D%2Ccolor_FFFFFF%2Cshadow_50%2Ct_80%2Cg_se%2Cx_10%2Cy_10"></p>
  <p data-lake-id="u64dbe565" id="u64dbe565"><br></p>
  <p data-lake-id="ua22318f7" id="ua22318f7"><span data-lake-id="u0989b07d" id="u0989b07d">太多的细节就不在这里深入介绍了。</span></p>
  <p data-lake-id="u42f236f3" id="u42f236f3"><br></p>
  <p data-lake-id="u9bde2619" id="u9bde2619"><span data-lake-id="u65eeb8f4" id="u65eeb8f4">我们基于 FATE，和外部机构合作搞了一套联邦学习的环境，阿里作为一方、外部机构作为另外一方，对大概十几万的数据做了联邦学习的建模。</span></p>
  <p data-lake-id="ue03a5006" id="ue03a5006"><br></p>
  <p data-lake-id="u9b67df11" id="u9b67df11"><span data-lake-id="u892d6843" id="u892d6843">最终结果还是比较符合我们的预期的，联邦学习的建模方式和本地建模，在性能上的损耗很小，小到几乎可忽略。</span></p>
  <p data-lake-id="u816969b4" id="u816969b4"><br></p>
  <h3 data-lake-id="0d98c747" id="0d98c747"><span data-lake-id="u7afb0c9a" id="u7afb0c9a">其他</span></h3>
  <p data-lake-id="u38965b18" id="u38965b18"><br></p>
  <p data-lake-id="u63ed1280" id="u63ed1280"><span data-lake-id="ube9721a6" id="ube9721a6">以上，算是我对这段时间关于隐私计算&amp;联邦学习的一些调研以及实践的一些总结。</span></p>
  <p data-lake-id="u8689463f" id="u8689463f"><br></p>
  <p data-lake-id="ue15bd014" id="ue15bd014"><span data-lake-id="ud05f0c17" id="ud05f0c17">之所以要研究这个，一方面是工作中需要，另外一方面，对于新技术，我们还是要多多接触了解一下。尤其是这些对于当下以及未来都是很重要的东西。</span></p>
 </body>
</html>